package com.heima.datasync.service.impl;

import com.heima.datasync.mapper.ApArticleMapper;
import com.heima.datasync.service.EsDataService;
import com.heima.datasync.vo.SearchArticleVO;
import com.heima.es.service.EsService;
import com.heima.model.article.pojos.ApArticle;
import com.heima.model.common.dtos.ResponseResult;
import com.heima.model.common.enums.AppHttpCodeEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author 壮哥
 * @Date 2021/10/10/12:34
 */
@Service
@Slf4j
public class EsDataServiceImpl implements EsDataService {
    public static final String ARTICLE_INDEX_NAME="app_info_article";
    @Autowired
    private ApArticleMapper apArticleMapper;
    @Autowired
    private EsService<SearchArticleVO> esService;

    @Override
    public ResponseResult dataInit() {
        // 批量导入数据:
        // 一般建议是1000-5000个文档，如果你的文档很大，可以适当减少队列，大小建议是5-15MB，默认不能超过100M
        // TODO 如果数据库数据过多 建议分段批量插入
        List<ApArticle> apArticles = apArticleMapper.findAllArticles();
        if (apArticles==null||apArticles.size()==0){
            return ResponseResult.errorResult(AppHttpCodeEnum.SERVER_ERROR,"数据库文章信息不存在");
        }
        ArrayList<SearchArticleVO> list = new ArrayList<>();
        for (ApArticle apArticle : apArticles) {
            SearchArticleVO articleVO = new SearchArticleVO();
            BeanUtils.copyProperties(apArticle,articleVO);
            articleVO.setLayout(apArticle.getLayout().intValue());
            list.add(articleVO);
        }
        esService.saveBatch(list,ARTICLE_INDEX_NAME);
        return ResponseResult.okResult();
    }
}
